package query;

import org.junit.Test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

/**
 * executeQuery执行SQL查询语句
 * 注意：在取第二列的数据的时候，用的是rs.get(2),而不是get(1),这是整个Java自带的api里面唯二的地方，使用基1的，即2就代表第二个
 * 另一个地方实在PrepareStatement这里
 */
public class Demo {
    @Test
    public void executeQueryTest() {
        Connection connection = ConnectionUtils.CONNECTION_UTILS.getConnection();
        try (
                Statement statement = connection.createStatement();
        ) {
            //ResultSet这个不用关闭，因为Statement关闭的时候会自动关闭ResultSet
            ResultSet resultSet = statement.executeQuery("select * from hero where id<5");
            /**
             * resultSet.next()
             * 将光标从当前位置向后移动一行。结果集光标最初位于第一行之前；对next方法的第一次调用使得第一行成为当前行；第二次调用使第二行称为当前行，以此类推
             * 如果当前行有效，则返回true，无效则返回false
             */
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                float hp = resultSet.getFloat("hp");
                int damage = resultSet.getInt("damage");
                System.out.printf("%d\t%s\t%f\t%d\n", id, name, hp, damage);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * SQL语句判断账号密码是否正确
     * 1.创建一个用户表，有字段username和password
     * 2.插入一些数据
     * 3.SQL语句判断账号密码是否正确
     * 判断账号密码的正确方式是根据账号密码到表中去找数据，如果有数据，就表明密码正确了，如果没有数据，就表明密码错误。
     */
    @Test
    public void login() {
        Connection connection = ConnectionUtils.CONNECTION_UTILS.getConnection();
        try (
                Statement statement = connection.createStatement();
        ) {
            ResultSet resultSet = statement.executeQuery("select name,password from user where name='王开琦' and password='thisispassword'");
            if (resultSet.next()) {
                System.out.println("账号密码正确");
            } else {
                System.out.println("账号或密码错误");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取总数
     */
    @Test
    public void getCount() {
        Connection connection = ConnectionUtils.CONNECTION_UTILS.getConnection();
        try (
                Statement statement = connection.createStatement();
        ) {
            ResultSet resultSet = statement.executeQuery("select count(1) from user");
            while (resultSet.next()) {
                System.out.println("resultSet.getInt(1) = " + resultSet.getInt(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 分页：起始记录，每页条数
     * <p>
     * 起始记录 = （当前页码-1）*每页条数
     */
    @Test
    public void listTest() {
        List<Hero> list = ConnectionUtils.CONNECTION_UTILS.list(10, 10);
        List<Hero> list2 = ConnectionUtils.CONNECTION_UTILS.list1(1, 10);

        System.out.println("list = " + list);
        System.out.println("list2 = " + list2);
    }


}
